/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.cast.teseg.controladores;

import edu.cast.teseg.dao.lineaPorlineaDAO;
import edu.cast.teseg.gui.CanvasPorcentaje;
import edu.cast.teseg.gui.GuiPrincipal;
import edu.cast.teseg.modelo.Dijkstra;
import edu.cast.teseg.modelo.GraficoGrafo;
import edu.cast.teseg.modelo.RedSocial;
import java.io.File;
import javax.swing.JFileChooser;
import javax.swing.SwingUtilities;

/**
 *
 * @author edgarin
 */
public class Controlador {
    GuiPrincipal frameGL = null;
    lineaPorlineaDAO lineaDaoGL = new lineaPorlineaDAO();
    private boolean activa=false;
    StringBuilder completo = new StringBuilder();
    RedSocial redSocialGL = null;
    CanvasPorcentaje canvasPorcentajeGL = new CanvasPorcentaje();  
    GraficoGrafo graficoGrafoGL = null;
    Dijkstra myDijkstraGL = new Dijkstra();

    public Controlador() {}    
   
       //Método que inicia el GUI del programa
    public void comenzar() {
        frameGL = new GuiPrincipal();     
        frameGL.getClikeador().setControlador(this);
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                frameGL.crearGui();
            }
        });  
        
        canvasPorcentajeGL = frameGL.getCanvasPorcentaje();
    }
    
    
    //*** Método desde donde se suben los archivos con la información de las paradas y rutas y también orígenes ***//
    // y destinos //
    public void subirArchivos(){
        JFileChooser chooser = new JFileChooser();
        int retorno = chooser.showOpenDialog(this.frameGL);
        if(retorno == JFileChooser.APPROVE_OPTION){
            File selecion = chooser.getSelectedFile();
            this.lineaDaoGL.setControlador(this);            
            this.lineaDaoGL.setRelacionesGrafo(selecion);
            activa=true;
        }
    }
    
    //** metodo que guarda el grafo al archivo de texto ***//
    public void salvarArchivoRespuestas(String respuestas){
        JFileChooser chooser = new JFileChooser();
        int retorno = chooser.showSaveDialog(this.frameGL);
        if(retorno == JFileChooser.APPROVE_OPTION){
            File seleccion = chooser.getSelectedFile();
            this.lineaDaoGL.escribirArchivoRespuestas(seleccion, this.completo);
            this.completo.delete(0, this.completo.length());
        }
    }
    
    //*** metodo que muestra y inicia el grafo aleatorio  version Beta***//
    public void setGraficoGrafo() {        
        this.graficoGrafoGL = new  GraficoGrafo();    
        this.graficoGrafoGL.iniciarGraficoGrafo();
        this.frameGL.getPanelGrafo().removeAll();
        this.frameGL.getPanelGrafo().add(graficoGrafoGL.getVv());
        this.frameGL.getPanelGrafo().updateUI();        
    }
    
    //*** metodo para encontrar todos los caminos ***///
    public void encontrarCaminos(){
        this.myDijkstraGL.ejecutaDijkstra();
    }
    
    //*** metodo para enviar mensajes al Gui ***//
    public void setMensajeErrores(String string) {
        this.frameGL.setMensajeError(string);
    }
    
    //***  metodo para validar si es un numero ***//
    public  boolean isNumeric(String cadena){
        try {
            Integer.parseInt(cadena);
            return true;
            }
        catch (NumberFormatException nfe){
            return false;
            }
    }
    
    //*** metodo para iniciar el grafo y enviarlo al GUI version JUNG ***//
    public void iniciarGraficoGrafo(int parseInt, double parseDouble) {
        this.graficoGrafoGL = new  GraficoGrafo();        
        this.graficoGrafoGL.iniciarGr(parseInt, parseDouble);
        this.frameGL.getPanelGrafo().removeAll();        
        this.frameGL.getPanelGrafo().add(this.graficoGrafoGL.getVv());
        this.frameGL.getPanelGrafo().updateUI();          
        this.frameGL.getNumEdges().setText(Integer.toString(this.graficoGrafoGL.getNumofedgesc()));
    }
 

}
